package com.ljy.my_study.lintcode.乱序字符串集;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/** 
* @author James
* @date 2019年5月4日 
*/
public class TestMain {
//	给出一个字符串数组S，找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串，那么他存在一个字母集合相同，但顺序不同的字符串也在S中。
//	所有的字符串都只包含小写字母
//	Have you met this question in a real interview?  Yes
//	Problem Correction
//	Example
//	样例1:
//
//	输入:["lint", "intl", "inlt", "code"]
//	输出:["lint", "inlt", "intl"]
//	样例 2:
//
//	输入:["ab", "ba", "cd", "dc", "e"]
//	输出: ["ab", "ba", "cd", "dc"]
	public static void main(String[] args) {
//		String[] arr= {"ab", "ba", "cd", "dc", "e"};
		String[] arr= {"",""};
		System.out.println(anagrams(arr));
	}
	
	public static List<String> anagrams(String[] strs) {
		if(strs==null) return new ArrayList<>();
		Map<String,List<String>> map=new HashMap<>();	
		for(String s:strs) {
			byte[] bArr=s.getBytes();
			Arrays.sort(bArr);
			String key=new String(bArr);
			List<String> valueList= map.get(key);
			if(valueList==null) {
				valueList=new ArrayList<>();
				map.put(key,valueList);
			}
			valueList.add(s);
		}
		List<String> resultList=new ArrayList<>();
		for(Entry<String,List<String>> e:map.entrySet()) {
			List<String> value= e.getValue();
			if(value!=null&&value.size()>1) {
				resultList.addAll(value);
			}
		}
		return resultList;
	}
}
